{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 导包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Imports\n",
    "\n",
    "# pandas\n",
    "import pandas as pd\n",
    "from pandas import Series,DataFrame\n",
    "\n",
    "# numpy, matplotlib, seaborn\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "sns.set_style('whitegrid')\n",
    "%matplotlib inline\n",
    "\n",
    "# machine learning\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.svm import SVC, LinearSVC\n",
    "from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier, GradientBoostingClassifier, ExtraTreesClassifier\n",
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "from sklearn.naive_bayes import GaussianNB\n",
    "from sklearn.tree import DecisionTreeClassifier\n",
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "from sklearn.model_selection import KFold\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "\n",
    "import warnings\n",
    "warnings.filterwarnings('ignore')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 导入数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>male</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>A/5 21171</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
       "      <td>female</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>PC 17599</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>C85</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>female</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>STON/O2. 3101282</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
       "      <td>female</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>113803</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>C123</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Allen, Mr. William Henry</td>\n",
       "      <td>male</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>373450</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   PassengerId  Survived  Pclass  \\\n",
       "0            1         0       3   \n",
       "1            2         1       1   \n",
       "2            3         1       3   \n",
       "3            4         1       1   \n",
       "4            5         0       3   \n",
       "\n",
       "                                                Name     Sex   Age  SibSp  \\\n",
       "0                            Braund, Mr. Owen Harris    male  22.0      1   \n",
       "1  Cumings, Mrs. John Bradley (Florence Briggs Th...  female  38.0      1   \n",
       "2                             Heikkinen, Miss. Laina  female  26.0      0   \n",
       "3       Futrelle, Mrs. Jacques Heath (Lily May Peel)  female  35.0      1   \n",
       "4                           Allen, Mr. William Henry    male  35.0      0   \n",
       "\n",
       "   Parch            Ticket     Fare Cabin Embarked  \n",
       "0      0         A/5 21171   7.2500   NaN        S  \n",
       "1      0          PC 17599  71.2833   C85        C  \n",
       "2      0  STON/O2. 3101282   7.9250   NaN        S  \n",
       "3      0            113803  53.1000  C123        S  \n",
       "4      0            373450   8.0500   NaN        S  "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_df = pd.read_csv('../input/train.csv')\n",
    "test_df = pd.read_csv('../input/test.csv')\n",
    "combine = [train_df.copy(),test_df.copy()]\n",
    "\n",
    "train_df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 查看数据\n",
    "\n",
    "---\n",
    "\n",
    "## 属性解释\n",
    "- PassengerId：一个用以标记每个乘客的数字id\n",
    "- Survived：标记乘客是否幸存——幸存(1)、死亡(0)。我们将预测这一列。\n",
    "- Pclass：标记乘客所属船层——第一层(1),第二层(2),第三层(3)。\n",
    "- Name：乘客名字。\n",
    "- Sex：乘客性别——男male、女female\n",
    "- Age：乘客年龄。部分。\n",
    "- SibSp：船上兄弟姐妹和配偶的数量。\n",
    "- Parch：船上父母和孩子的数量。\n",
    "- Ticket：乘客的船票号码。\n",
    "- Fare：乘客为船票付了多少钱。\n",
    "- Cabin：乘客住在哪个船舱。\n",
    "- Embarked：乘客从哪个地方登上泰坦尼克号。\n",
    "\n",
    "我们都知道妇女和儿童更可能被救。因此，年龄和性别很可能更好的帮助我们预测。认为乘客的船层可能会影响结果也是符合逻辑的，因为第一层的船舱更靠近船的甲板。Fare票价和乘客所住船层相关，而且可能是高度相关的，但是也可能会增加一些额外的信息。SibSp、Parch兄弟姐妹、配偶、父母/孩子的数量很可能关系到是否被某一个或很多个人救，会有很多人去帮助你或者有很多人想到你尝试去救你。\n",
    "像Embarked登船(也许有一些信息和怎么靠近船的顶部的人的船舱有关),Ticket票号和Name名字。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 891 entries, 0 to 890\n",
      "Data columns (total 12 columns):\n",
      "PassengerId    891 non-null int64\n",
      "Survived       891 non-null int64\n",
      "Pclass         891 non-null int64\n",
      "Name           891 non-null object\n",
      "Sex            891 non-null object\n",
      "Age            714 non-null float64\n",
      "SibSp          891 non-null int64\n",
      "Parch          891 non-null int64\n",
      "Ticket         891 non-null object\n",
      "Fare           891 non-null float64\n",
      "Cabin          204 non-null object\n",
      "Embarked       889 non-null object\n",
      "dtypes: float64(2), int64(5), object(5)\n",
      "memory usage: 83.6+ KB\n"
     ]
    }
   ],
   "source": [
    "train_df.info()\n",
    "# train_df.head()\n",
    "# print(train_df.describe())\n",
    "# print(train_df.columns.values)\n",
    "# print(test_df.columns.values)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 数据分析和数据清洗\n",
    "\n",
    "## 数据类型\n",
    "- 7个特征是整型或者浮点型，测试集中有6个\n",
    "- 5个特征是字符串型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "PassengerId      int64\n",
       "Survived         int64\n",
       "Pclass           int64\n",
       "Name            object\n",
       "Sex             object\n",
       "Age            float64\n",
       "SibSp            int64\n",
       "Parch            int64\n",
       "Ticket          object\n",
       "Fare           float64\n",
       "Cabin           object\n",
       "Embarked        object\n",
       "dtype: object"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_df.dtypes"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 样本中连续样本的分布\n",
    "这有助于我们确定除了其他早期见解之外，实际问题领域的培训数据集的代表性如何。\n",
    "\n",
    "- 总共891个样本，占Titanic样本(2224)中的41%\n",
    "- Survived 是一个0-1的类别特征\n",
    "- 样本中存活率为38%，实际是32%\n",
    "- 大多数乘客（75%）没有父母和小孩在船上\n",
    "- 大约30%的乘客有兄弟或者配偶在船上\n",
    "- 只有小于1%的乘客的船费大于512美元\n",
    "- 35-80岁的乘客小于1%\n",
    "\n",
    "## 类别特征的分布\n",
    "\n",
    "- Name在数据集中的每一个值都是唯一的(count=unique=891)\n",
    "- Sex变量有两个可能的值，male占65%(top=male, freq=577/count=891)\n",
    "- Cabin有一些样本的值是一样的，可能是有一些乘客共用一个船舱\n",
    "- Embarked有3个值，大多数乘客都是S(top=S)\n",
    "- Ticket有22%的重复率(unique=681)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>891.000000</td>\n",
       "      <td>891.000000</td>\n",
       "      <td>891.000000</td>\n",
       "      <td>891</td>\n",
       "      <td>891</td>\n",
       "      <td>714.000000</td>\n",
       "      <td>891.000000</td>\n",
       "      <td>891.000000</td>\n",
       "      <td>891</td>\n",
       "      <td>891.000000</td>\n",
       "      <td>204</td>\n",
       "      <td>889</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>unique</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>891</td>\n",
       "      <td>2</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>681</td>\n",
       "      <td>NaN</td>\n",
       "      <td>147</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>top</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Graham, Mr. George Edward</td>\n",
       "      <td>male</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>CA. 2343</td>\n",
       "      <td>NaN</td>\n",
       "      <td>C23 C25 C27</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>freq</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1</td>\n",
       "      <td>577</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>7</td>\n",
       "      <td>NaN</td>\n",
       "      <td>4</td>\n",
       "      <td>644</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>446.000000</td>\n",
       "      <td>0.383838</td>\n",
       "      <td>2.308642</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>29.699118</td>\n",
       "      <td>0.523008</td>\n",
       "      <td>0.381594</td>\n",
       "      <td>NaN</td>\n",
       "      <td>32.204208</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>257.353842</td>\n",
       "      <td>0.486592</td>\n",
       "      <td>0.836071</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>14.526497</td>\n",
       "      <td>1.102743</td>\n",
       "      <td>0.806057</td>\n",
       "      <td>NaN</td>\n",
       "      <td>49.693429</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.420000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>223.500000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>20.125000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>7.910400</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>446.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>28.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>14.454200</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>668.500000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>38.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>31.000000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>891.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>80.000000</td>\n",
       "      <td>8.000000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>512.329200</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        PassengerId    Survived      Pclass                       Name   Sex  \\\n",
       "count    891.000000  891.000000  891.000000                        891   891   \n",
       "unique          NaN         NaN         NaN                        891     2   \n",
       "top             NaN         NaN         NaN  Graham, Mr. George Edward  male   \n",
       "freq            NaN         NaN         NaN                          1   577   \n",
       "mean     446.000000    0.383838    2.308642                        NaN   NaN   \n",
       "std      257.353842    0.486592    0.836071                        NaN   NaN   \n",
       "min        1.000000    0.000000    1.000000                        NaN   NaN   \n",
       "25%      223.500000    0.000000    2.000000                        NaN   NaN   \n",
       "50%      446.000000    0.000000    3.000000                        NaN   NaN   \n",
       "75%      668.500000    1.000000    3.000000                        NaN   NaN   \n",
       "max      891.000000    1.000000    3.000000                        NaN   NaN   \n",
       "\n",
       "               Age       SibSp       Parch    Ticket        Fare        Cabin  \\\n",
       "count   714.000000  891.000000  891.000000       891  891.000000          204   \n",
       "unique         NaN         NaN         NaN       681         NaN          147   \n",
       "top            NaN         NaN         NaN  CA. 2343         NaN  C23 C25 C27   \n",
       "freq           NaN         NaN         NaN         7         NaN            4   \n",
       "mean     29.699118    0.523008    0.381594       NaN   32.204208          NaN   \n",
       "std      14.526497    1.102743    0.806057       NaN   49.693429          NaN   \n",
       "min       0.420000    0.000000    0.000000       NaN    0.000000          NaN   \n",
       "25%      20.125000    0.000000    0.000000       NaN    7.910400          NaN   \n",
       "50%      28.000000    0.000000    0.000000       NaN   14.454200          NaN   \n",
       "75%      38.000000    1.000000    0.000000       NaN   31.000000          NaN   \n",
       "max      80.000000    8.000000    6.000000       NaN  512.329200          NaN   \n",
       "\n",
       "       Embarked  \n",
       "count       889  \n",
       "unique        3  \n",
       "top           S  \n",
       "freq        644  \n",
       "mean        NaN  \n",
       "std         NaN  \n",
       "min         NaN  \n",
       "25%         NaN  \n",
       "50%         NaN  \n",
       "75%         NaN  \n",
       "max         NaN  "
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# train_df.describe(include=['object'])\n",
    "# train_df.describe(include=['number'])\n",
    "train_df.describe(include='all')\n",
    "# train_df['Survived'].describe(percentiles=[.61, .62])\n",
    "# Review survived rate using `percentiles=[.61, .62]` knowing our problem description mentions 38% survival rate.\n",
    "# Review Parch distribution using `percentiles=[.75, .8]`\n",
    "# SibSp distribution `[.68, .69]`\n",
    "# Age and Fare `[.1, .2, .3, .4, .5, .6, .7, .8, .9, .99]`"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. PassengerId\n",
    "\n",
    "- 重复率为0，不包含信息，对结果没有贡献，删掉"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>male</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>A/5 21171</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
       "      <td>female</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>PC 17599</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>C85</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>female</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>STON/O2. 3101282</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
       "      <td>female</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>113803</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>C123</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Allen, Mr. William Henry</td>\n",
       "      <td>male</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>373450</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   PassengerId  Survived  Pclass  \\\n",
       "0            1         0       3   \n",
       "1            2         1       1   \n",
       "2            3         1       3   \n",
       "3            4         1       1   \n",
       "4            5         0       3   \n",
       "\n",
       "                                                Name     Sex   Age  SibSp  \\\n",
       "0                            Braund, Mr. Owen Harris    male  22.0      1   \n",
       "1  Cumings, Mrs. John Bradley (Florence Briggs Th...  female  38.0      1   \n",
       "2                             Heikkinen, Miss. Laina  female  26.0      0   \n",
       "3       Futrelle, Mrs. Jacques Heath (Lily May Peel)  female  35.0      1   \n",
       "4                           Allen, Mr. William Henry    male  35.0      0   \n",
       "\n",
       "   Parch            Ticket     Fare Cabin Embarked  \n",
       "0      0         A/5 21171   7.2500   NaN        S  \n",
       "1      0          PC 17599  71.2833   C85        C  \n",
       "2      0  STON/O2. 3101282   7.9250   NaN        S  \n",
       "3      0            113803  53.1000  C123        S  \n",
       "4      0            373450   8.0500   NaN        S  "
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "for dataset in combine:\n",
    "    dataset.drop(['PassengerId'],axis=1,inplace=True)\n",
    "\n",
    "# combine[0].head()\n",
    "\n",
    "train_df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2. Survived\n",
    "\n",
    "- 目标标签，不做处理\n",
    "\n",
    "## 3. Pclass\n",
    "\n",
    "- 分组对存活率求均值，发现各组不同，特征有用保留，或者使用get_dummies进行特征扩充"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x3dca1d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.factorplot('Pclass','Survived',order=[1,2,3], data=train_df,size=5)\n",
    "\n",
    "for dataset in combine:\n",
    "    # create dummy variables for Pclass column, & drop 3rd class as it has the lowest average of survived passengers\n",
    "    dummies = pd.get_dummies(dataset['Pclass'])\n",
    "    dummies.columns = ['Class_1','Class_2','Class_3']\n",
    "    dataset = dataset.join(dummies)\n",
    "    dataset.drop(['Class_3'], axis=1, inplace=True)\n",
    "    dataset.drop(['Pclass'],axis=1,inplace=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4. Name\n",
    "\n",
    "- 值的重复率为0，删除或者提取title，正则匹配，开头为大写字母，.结尾的子字符串"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 891 entries, 0 to 890\n",
      "Data columns (total 12 columns):\n",
      "PassengerId    891 non-null int64\n",
      "Survived       891 non-null int64\n",
      "Pclass         891 non-null int64\n",
      "Name           891 non-null object\n",
      "Sex            891 non-null object\n",
      "Age            714 non-null float64\n",
      "SibSp          891 non-null int64\n",
      "Parch          891 non-null int64\n",
      "Ticket         891 non-null object\n",
      "Fare           891 non-null float64\n",
      "Cabin          204 non-null object\n",
      "Embarked       889 non-null object\n",
      "dtypes: float64(2), int64(5), object(5)\n",
      "memory usage: 83.6+ KB\n"
     ]
    }
   ],
   "source": [
    "train_df.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import re\n",
    "\n",
    "# A function to get the title from a name.\n",
    "def get_title(name):\n",
    "    # Use a regular expression to search for a title.  Titles always consist of capital and lowercase letters, and end with a period.\n",
    "    title_search = re.search(' ([A-Za-z]+)\\.', name)\n",
    "    # If the title exists, extract and return it.\n",
    "    if title_search:\n",
    "        return title_search.group(1)\n",
    "    return \"\"\n",
    "\n",
    "# Map each title to an integer.  Some titles are very rare, and are compressed into the same codes as other titles.\n",
    "title_mapping = {\"Mr\": 1, \"Miss\": 2, \"Mrs\": 3, \"Master\": 4, \"Dr\": 5, \"Rev\": 6, \"Major\": 7, \"Col\": 7, \"Mlle\": 8, \"Mme\": 8, \"Don\": 9, \"Lady\": 10, \"Countess\": 10, \"Jonkheer\": 10, \"Sir\": 9, \"Capt\": 7, \"Ms\": 2}\n",
    "\n",
    "for dataset in combine:   \n",
    "    # Get all the titles and print how often each one occurs.\n",
    "    titles = dataset['Name'].apply(get_title)\n",
    "    titles = titles.map(title_mapping)\n",
    "    # Add in the title column.\n",
    "    titles[titles.isnull()] = 0\n",
    "    dataset['Title'] = titles\n",
    "    dataset['Title'].astype(int)\n",
    "    dataset.drop(['Name'],axis=1,inplace=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 5. Sex\n",
    "\n",
    "- 从背景就可以知道女人小孩存活率高，所以贡献大\n",
    "- 类别特征，转化成数值型，或者使用get_dummies进行特征扩充"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7514290>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, (axis1,axis2) = plt.subplots(1,2,figsize=(10,5))\n",
    "sns.countplot(x='Sex',data=train_df,ax=axis1,order=['male','female'])\n",
    "sns.barplot(x='Sex',y='Survived',data=train_df,ax=axis2,order=['male','female'])\n",
    "\n",
    "sex_mapping = {'female' : 0, 'male' : 1}\n",
    "for dataset in combine:\n",
    "    sexs = dataset['Sex'].map(sex_mapping)\n",
    "    dataset['Sex'] = sexs"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 6. Age\n",
    "\n",
    "- 小孩存活率高，对结果贡献率大\n",
    "- 有缺失值需要补全\n",
    "- 区间划分\n",
    "\n",
    "缺失值处理可选方法：\n",
    "1. 用同均值方差的随机数补全\n",
    "2. 用其他相关的特征（Age, Gender, and Pclass）进行分类，然后取中位数进行补全\n",
    "3. 综合1和2，先分类，然后取均值方差随机数进行补全\n",
    "\n",
    "- 1和3会带来新的噪声，所以选择2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nFcoQIElSoQwBkiQVyhAgSVKhDAGSJBXKECBJUqEMAZIkFcoQIElSoWY02zAipgM3Aisz89CI2Am4\nCNgGGAAWZeZjnemmJElqt1YqAe8EBofd/xRwRmbuDNwPHNfOjkmSpM5qKgRExFzgEODs+v40YH/g\n0rrJ+cDhneigJEnqjGYrAZ8F3g88Wd/fBnggM9fX9+8C5rS5b5IkqYManhMQEYcC92TmQETs1+oT\nDA4ONmyzbt26ptr1E8fUH0oe0/z581tab6N1lvxa9hPH1B9aGVOrc3m4Zk4M3Ad4bUQcDMwEng2c\nCcyOiBl1NWAusHK8nRscHJzQIHqRY+oPjql5jdbpa9kfHFN/mKwxNTwckJkfysy5mTkPeANwTWYe\nA/wAOKJuthi4omO9lCRJbTeR6wR8AHhPRNxBdY7AOe3pkiRJmgxNXycAIDOvBa6tb98J7NX+LkmS\npMngFQMlSSqUIUCSpEIZAiRJKpQhQJKkQhkCJEkqlCFAkqRCGQIkSSqUIUCSpEIZAiRJKpQhQJKk\nQhkCJEkqlCFAkqRCGQIkSSqUIUCSpEIZAiRJKpQhQJKkQhkCJEkqlCFAkqRCGQIkSSqUIUCSpEIZ\nAiRJKpQhQJKkQhkCJEkqlCFAkqRCGQIkSSqUIUCSpEIZAiRJKpQhQJKkQhkCJEkqlCFAkqRCGQIk\nSSqUIUCSpEIZAiRJKtSMRg0iYkfgq8D2wBDw5cw8MyK2Bi4G5gErgCMz8/7OdVWSJLVTM5WA9cB7\nM3MBsDfwjohYAHwQuDozdwGuru9LkqQ+0TAEZOaqzPx5ffshYBCYAxwGnF83Ox84vFOdlCRJ7dfS\nOQERMQ/YHVgKbJ+Zq+pf3U11uECSJPWJaUNDQ001jIhZwA+BUzPzsoh4IDNnD/v9/Zm51fDHDAwM\nDG2++eYN171u3TpmzpzZWs97nGPqDyWPaf78+dOaXWczc7nk17KfOKb+0MqYWpnLIzU8MRAgIjYB\nvglckJmX1Yt/FxE7ZOaqiNgBuGeMzjVc/+DgYFPt+olj6g+OqXmN1ulr2R8cU3+YrDE1PBwQEdOA\nc4DBzDx92K+WAIvr24uBK9rfPUmS1CnNVAL2ARYByyNiWb3sw8BpwCURcRzwa+DIznRRkiR1QsMQ\nkJk/BsY63nBAe7sjSZImi1cMlCSpUIYASZIKZQiQJKlQhgBJkgplCJAkqVCGAEmSCmUIkCSpUIYA\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7c253d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "grid = sns.FacetGrid(train_df, row='Pclass', col='Sex', size=2.2, aspect=1.6)\n",
    "grid.map(plt.hist, 'Age', alpha=.5, bins=20)\n",
    "grid.add_legend()\n",
    "\n",
    "guess_ages = np.zeros((2,3))\n",
    "for dataset in combine:\n",
    "    # 计算中位数\n",
    "    for i in range(0, 2):\n",
    "        for j in range(0, 3):\n",
    "            guess_df = dataset[(dataset['Sex'] == i) & \\\n",
    "                                  (dataset['Pclass'] == j+1)]['Age'].dropna()\n",
    "\n",
    "            # age_mean = guess_df.mean()\n",
    "            # age_std = guess_df.std()\n",
    "            # age_guess = rnd.uniform(age_mean - age_std, age_mean + age_std)\n",
    "\n",
    "            age_guess = guess_df.median()\n",
    "\n",
    "            # Convert random age float to nearest .5 age\n",
    "            guess_ages[i,j] = int( age_guess/0.5 + 0.5 ) * 0.5\n",
    "    \n",
    "    # 补全\n",
    "    for i in range(0, 2):\n",
    "        for j in range(0, 3):\n",
    "            dataset.loc[ (dataset.Age.isnull()) & (dataset.Sex == i) & (dataset.Pclass == j+1),\\\n",
    "                    'Age'] = guess_ages[i,j]\n",
    "\n",
    "    dataset['Age'] = dataset['Age'].astype(int)\n",
    "    \n",
    "    # 区间划分\n",
    "    dataset.loc[ dataset['Age'] <= 16, 'Age'] = 0\n",
    "    dataset.loc[(dataset['Age'] > 16) & (dataset['Age'] <= 32), 'Age'] = 1\n",
    "    dataset.loc[(dataset['Age'] > 32) & (dataset['Age'] <= 48), 'Age'] = 2\n",
    "    dataset.loc[(dataset['Age'] > 48) & (dataset['Age'] <= 64), 'Age'] = 3\n",
    "    dataset.loc[ dataset['Age'] > 64, 'Age']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 7. SibSp+Parch=Family\n",
    "\n",
    " - 构造一个新特征，在船上的家人人数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Family</th>\n",
       "      <th>Survived</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>0.724138</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>0.578431</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>0.552795</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>7</td>\n",
       "      <td>0.333333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0.303538</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0.200000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>6</td>\n",
       "      <td>0.136364</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>8</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>11</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Family  Survived\n",
       "3       4  0.724138\n",
       "2       3  0.578431\n",
       "1       2  0.552795\n",
       "6       7  0.333333\n",
       "0       1  0.303538\n",
       "4       5  0.200000\n",
       "5       6  0.136364\n",
       "7       8  0.000000\n",
       "8      11  0.000000"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "for dataset in combine:\n",
    "    dataset['Family'] = dataset['SibSp']+dataset['Parch']+1\n",
    "    dataset.drop(['SibSp'],axis=1,inplace=True)\n",
    "    dataset.drop(['Parch'],axis=1,inplace=True)\n",
    "    \n",
    "combine[0][['Family', 'Survived']].groupby(['Family'], as_index=False).mean().sort_values(by='Survived', ascending=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 8. Ticket\n",
    "\n",
    "- 重复率22%，而且和目标相关性小，所以删掉"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "for dataset in combine:\n",
    "    dataset.drop(['Ticket'],axis=1,inplace=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 9. Fare\n",
    "\n",
    "- 用中位数补全缺失值\n",
    "- 对Fare进行区间划分"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "for dataset in combine:\n",
    "    dataset['Fare'].fillna(dataset['Fare'].dropna().median(),inplace=True)\n",
    "    dataset.loc[ dataset['Fare'] <= 7.91, 'Fare'] = 0\n",
    "    dataset.loc[(dataset['Fare'] > 7.91) & (dataset['Fare'] <= 14.454), 'Fare'] = 1\n",
    "    dataset.loc[(dataset['Fare'] > 14.454) & (dataset['Fare'] <= 31), 'Fare']   = 2\n",
    "    dataset.loc[ dataset['Fare'] > 31, 'Fare'] = 3\n",
    "    dataset['Fare'] = dataset['Fare'].astype(int)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 10. Cabin\n",
    "\n",
    "- 缺失值太多，处理缺失值带入大量噪声，包含信息量少，删掉"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "for dataset in combine:\n",
    "    dataset.drop(['Cabin'],axis=1,inplace=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 11. Embarked\n",
    "\n",
    "- 用出现频率最高的补全缺失值\n",
    "- 转化为数值型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "  Embarked  Survived\n",
      "0        C  0.553571\n",
      "1        Q  0.389610\n",
      "2        S  0.336957\n"
     ]
    }
   ],
   "source": [
    "freq_port = train_df.Embarked.dropna().mode()[0]\n",
    "\n",
    "for dataset in combine:\n",
    "    dataset['Embarked'] = dataset['Embarked'].fillna(freq_port)\n",
    "\n",
    "print(train_df[['Embarked', 'Survived']].groupby(['Embarked'], as_index=False).mean().sort_values(by='Survived', ascending=False))\n",
    "\n",
    "for dataset in combine:\n",
    "    dataset['Embarked'] = dataset['Embarked'].map({'S': 0, 'C': 1, 'Q': 2}).astype(int)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 12. Pclass*Age"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "for dataset in combine:\n",
    "    dataset['Age*Class'] = dataset.Age * dataset.Pclass"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 13. IsAlone"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "for dataset in combine:\n",
    "    dataset['IsAlone'] = 0\n",
    "    dataset.loc[dataset['Family'] == 1, 'IsAlone'] = 1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## FamilyId NameLength"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>Title</th>\n",
       "      <th>Family</th>\n",
       "      <th>Age*Class</th>\n",
       "      <th>IsAlone</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Survived  Pclass  Sex  Age  Fare  Embarked  Title  Family  Age*Class  \\\n",
       "0         0       3    1    1     0         0      1       2          3   \n",
       "1         1       1    0    2     3         1      3       2          2   \n",
       "2         1       3    0    1     1         0      2       1          3   \n",
       "3         1       1    0    2     3         0      3       2          2   \n",
       "4         0       3    1    2     1         0      1       1          6   \n",
       "\n",
       "   IsAlone  \n",
       "0        0  \n",
       "1        0  \n",
       "2        1  \n",
       "3        0  \n",
       "4        1  "
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "combine[0].head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>Title</th>\n",
       "      <th>Family</th>\n",
       "      <th>Age*Class</th>\n",
       "      <th>IsAlone</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>3</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Pclass  Sex  Age  Fare  Embarked  Title  Family  Age*Class  IsAlone\n",
       "0       3    1    2     0         2    1.0       1          6        1\n",
       "1       3    0    2     0         0    3.0       2          6        0\n",
       "2       2    1    3     1         2    1.0       1          6        1\n",
       "3       3    1    1     1         0    1.0       1          3        1\n",
       "4       3    0    1     1         0    3.0       3          3        0"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "combine[1].head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 891 entries, 0 to 890\n",
      "Data columns (total 10 columns):\n",
      "Survived     891 non-null int64\n",
      "Pclass       891 non-null int64\n",
      "Sex          891 non-null int64\n",
      "Age          891 non-null int64\n",
      "Fare         891 non-null int64\n",
      "Embarked     891 non-null int64\n",
      "Title        891 non-null int64\n",
      "Family       891 non-null int64\n",
      "Age*Class    891 non-null int64\n",
      "IsAlone      891 non-null int64\n",
      "dtypes: int64(10)\n",
      "memory usage: 69.7 KB\n"
     ]
    }
   ],
   "source": [
    "combine[0].info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 皮尔逊相关系数热图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7a14050>"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nBf6afwEzawGku/tHkHcb6d1SJVJERERk/1XH3ReH/y8B6hSwTFNglZmNAA4BPgZudfcib0etSqSI\niIhIvHJTb2KNmX1McJ/3nd2e/4m7x8ysoASkAycARwI/EoyhvAwo8jaiqkSKiIiI7MPcvWth75nZ\nUjOr5+6LzaweBY91/BmY5O5Z4TpvA8exm0qkJtaIiIiIxCkWy03qYw+8C1wa/n8p8E4By3wLVDWz\nWuHzLsCM3W1YlUgRERGR/dcDwMlmNgfoGj7HzI42s+cAwrGPNwGfmNlUIAL8d3cbjsR00UwRERGR\nuHSv+aekVpxGL382kszPz09jIkVERETilYITa5JF3dkiIiIiUmxqiRQRERGJl4YB5lFLpIiIiIgU\nmyqRIiIiIlJs6s4WERERiVfuHl2rcb+klkgRERERKTa1RIqIiIjESxNr8qglUkRERESKTZVIERER\nESk2dWeLiIiIxCmmiTV51BIpIiIiIsWmlkgRERGReGliTR61RIqIiIhIsakSKSIiIiLFpu5sERER\nkXjlqjt7G7VEioiIiEixqRIpIiIiIsWm7mwRERGReMV0ncht1BIpIiIiIsWmlkgRERGROMU0sSaP\nWiJFREREpNhUiRQRERGRYlN3toiIiEi8NLEmj1oiRURERKTY1BIpIiIiEidNrNlOLZEiIiIiUmyq\nRIqIiIhIsak7W0RERCRemliTRy2RIiIiIlJskVhMA0RFREREpHjUEikiIiIixaZKpIiIiIgUmyqR\nIiIiIlJsqkSKiIiISLGpEikiIiIixaZKpIiIiIgU2/8HR1qqbYk85uQAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x86c53d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "colormap = plt.cm.viridis\n",
    "plt.figure(figsize=(12,12))\n",
    "plt.title('Pearson Correlation of Features', y=1.05, size=15)\n",
    "sns.heatmap(combine[0].astype(float).corr(),linewidths=0.1,vmax=1.0, square=True, cmap=colormap, linecolor='white', annot=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 构造训练集和测试集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(numpy.ndarray, (891, 9), numpy.ndarray, (891,), numpy.ndarray, (418, 9))"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train = combine[0].drop(['Survived'],axis=1).values\n",
    "y_train = combine[0]['Survived'].ravel()\n",
    "X_test = combine[1].values\n",
    "type(X_train), X_train.shape, type(y_train), y_train.shape, type(X_train), X_test.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 进行训练和预测\n",
    "\n",
    "## sklearn机器学习方法封装"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Class to extend the Sklearn classifier\n",
    "class SklearnHelper(object):\n",
    "    def __init__(self, clf, seed=0, params=None):\n",
    "        params['random_state'] = seed\n",
    "        self.clf = clf(**params)\n",
    "\n",
    "    def train(self, x_train, y_train):\n",
    "        self.clf.fit(x_train, y_train)\n",
    "\n",
    "    def predict(self, x):\n",
    "        return self.clf.predict(x)\n",
    "    \n",
    "    def fit(self,x,y):\n",
    "        return self.clf.fit(x,y)\n",
    "    \n",
    "    def feature_importances(self,x,y):\n",
    "        print(self.clf.fit(x,y).feature_importances_)\n",
    "    \n",
    "    def score(self, x, y):\n",
    "        return self.clf.score(x,y)\n",
    "    \n",
    "class SklearnHelper_norandom(object):\n",
    "    def __init__(self, clf, params=None):\n",
    "        self.clf = clf(**params)\n",
    "\n",
    "    def train(self, x_train, y_train):\n",
    "        self.clf.fit(x_train, y_train)\n",
    "\n",
    "    def predict(self, x):\n",
    "        return self.clf.predict(x)\n",
    "    \n",
    "    def fit(self,x,y):\n",
    "        return self.clf.fit(x,y)\n",
    "    \n",
    "    def feature_importances(self,x,y):\n",
    "        print(self.clf.fit(x,y).feature_importances_)\n",
    "    \n",
    "    def score(self, x, y):\n",
    "        return self.clf.score(x,y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## out-of-fold交叉验证方法封装"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def get_oof(clf_help, X_train, y_train, X_test, NFOLDS=5, SEED=0):\n",
    "    ntrain = X_train.shape[0]\n",
    "    ntest = X_test.shape[0]\n",
    "    oof_train = np.zeros((ntrain,))\n",
    "    oof_test = np.zeros((ntest,))\n",
    "    oof_test_skf = np.empty((NFOLDS, ntest))\n",
    "    \n",
    "    kf = KFold(n_splits=NFOLDS, random_state=SEED, shuffle=False)\n",
    "    for i, (train_index, test_index) in enumerate(kf.split(X_train,y_train)):\n",
    "        x_tr = X_train[train_index]\n",
    "        y_tr = y_train[train_index]\n",
    "        x_te = X_train[test_index]\n",
    "\n",
    "        clf_help.train(x_tr, y_tr)\n",
    "\n",
    "        oof_train[test_index] = clf_help.predict(x_te)\n",
    "        oof_test_skf[i, :] = clf_help.predict(X_test)\n",
    "\n",
    "    oof_test[:] = oof_test_skf.mean(axis=0)\n",
    "    return oof_train.reshape(-1, 1), oof_test.reshape(-1, 1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Logistic Regression\n",
    "逻辑回归是在工作流早期运行的有用模型。 逻辑回归通过使用逻辑函数估计概率来衡量分类因变量（特征）与一个或多个独立变量（特征）之间的关系，其是累积逻辑分布\n",
    "\n",
    "- 训练集和评价集是同一个"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Feature</th>\n",
       "      <th>Correlation</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Age</td>\n",
       "      <td>0.374815</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Title</td>\n",
       "      <td>0.323551</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Fare</td>\n",
       "      <td>0.299896</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Embarked</td>\n",
       "      <td>0.210376</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Pclass</td>\n",
       "      <td>-0.204282</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>IsAlone</td>\n",
       "      <td>-0.373236</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>Age*Class</td>\n",
       "      <td>-0.399418</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>Family</td>\n",
       "      <td>-0.420627</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Sex</td>\n",
       "      <td>-2.264402</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     Feature  Correlation\n",
       "2        Age     0.374815\n",
       "5      Title     0.323551\n",
       "3       Fare     0.299896\n",
       "4   Embarked     0.210376\n",
       "0     Pclass    -0.204282\n",
       "8    IsAlone    -0.373236\n",
       "7  Age*Class    -0.399418\n",
       "6     Family    -0.420627\n",
       "1        Sex    -2.264402"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Logistic Regression\n",
    "\n",
    "logreg = LogisticRegression()\n",
    "logreg.fit(X_train, y_train)\n",
    "# Y_pred = logreg.predict(X_test)\n",
    "# acc_log = round(logreg.score(X_train, y_train) * 100, 2)\n",
    "# print(acc_log)\n",
    "\n",
    "coeff_df = pd.DataFrame(combine[0].columns.delete(0))\n",
    "coeff_df.columns = ['Feature']\n",
    "coeff_df[\"Correlation\"] = pd.Series(logreg.coef_[0])\n",
    "\n",
    "coeff_df.sort_values(by='Correlation', ascending=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 设置模型参数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Random Forests Parameters\n",
    "rf_tuned_params = {\n",
    "#     'n_jobs': -1,\n",
    "    'n_estimators': range(100,600,100),\n",
    "#      'warm_start': True, \n",
    "     #'max_features': 0.2,\n",
    "    'max_depth': [5,6,7,None],\n",
    "    'min_samples_leaf': [1,2,3,0.1,0.3,0.5],\n",
    "    'max_features' : ['sqrt','auto','log2',None],\n",
    "#     'verbose': 0\n",
    "}\n",
    "rf_clf = GridSearchCV(RandomForestClassifier(n_jobs=-1,warm_start=True,verbose=0),rf_tuned_params,cv=5)\n",
    "rf_clf.fit(X_train,y_train)\n",
    "print(\"Best paramters set found:\", rf_clf.best_params_)\n",
    "# print(\"Grid score:\")\n",
    "# for params, mean_score, scores in rf_clf.grid_scores_:\n",
    "#     print(\"\\t%0.3f (+\\-%0.03f) for %s\" % (mean_score, scores.std() * 2, params))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Extra Trees Parameters\n",
    "et_tuned_params = {\n",
    "#     'n_jobs': -1,\n",
    "    'n_estimators':range(100,600,100),\n",
    "    'max_features': ['sqrt','auto','log2',None,0.1,0.3,0.5,0.7,0.9],\n",
    "    'max_depth': [4,5,6,7,8,None],\n",
    "    'min_samples_leaf': [1,2,3,0.1,0.3,0.5],\n",
    "#     'verbose': 0\n",
    "}\n",
    "et_clf = GridSearchCV(ExtraTreesClassifier(n_jobs=-1,verbose=0),et_tuned_params,cv=5)\n",
    "et_clf.fit(X_train,y_train)\n",
    "print(\"Best paramters set found:\", et_clf.best_params_)\n",
    "# print(\"Grid score:\")\n",
    "# for params, mean_score, scores in et_clf.grid_scores_:\n",
    "#     print(\"\\t%0.3f (+\\-%0.03f) for %s\" % (mean_score, scores.std() * 2, params))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "('Best paramters set found:', {'n_estimators': 100, 'learning_rate': 0.2})\n"
     ]
    }
   ],
   "source": [
    "# AdaBoost parameters\n",
    "ada_tuned_params = {\n",
    "    'n_estimators': range(100,1000,100),\n",
    "    'learning_rate' : [0.2,0.5,0.75,1]\n",
    "}\n",
    "ada_clf = GridSearchCV(AdaBoostClassifier(),ada_tuned_params,cv=5)\n",
    "ada_clf.fit(X_train,y_train)\n",
    "print(\"Best paramters set found:\", ada_clf.best_params_)\n",
    "# print(\"Grid score:\")\n",
    "# for params, mean_score, scores in ada_clf.grid_scores_:\n",
    "#     print(\"\\t%0.3f (+\\-%0.03f) for %s\" % (mean_score, scores.std() * 2, params))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "('Best paramters set found:', {'max_features': 'auto', 'n_estimators': 100, 'max_depth': 4, 'min_samples_leaf': 1})\n"
     ]
    }
   ],
   "source": [
    "# Gradient Boosting parameters\n",
    "gb_tuned_params = {\n",
    "    'n_estimators': range(100,600,100),\n",
    "    'max_features': ['sqrt','auto','log2',0.1,0.2,0.5], \n",
    "    'max_depth': [4,5,None],\n",
    "    'min_samples_leaf': [1,2,0.1,0.5],\n",
    "#     'verbose': 0\n",
    "}\n",
    "gb_clf = GridSearchCV(GradientBoostingClassifier(verbose=0),gb_tuned_params,cv=5)\n",
    "gb_clf.fit(X_train,y_train)\n",
    "print(\"Best paramters set found:\", gb_clf.best_params_)\n",
    "# print(\"Grid score:\")\n",
    "# for params, mean_score, scores in gb_clf.grid_scores_:\n",
    "#     print(\"\\t%0.3f (+\\-%0.03f) for %s\" % (mean_score, scores.std() * 2, params))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "('Best paramters set found:', {'kernel': 'linear', 'C': 0.02})\n"
     ]
    }
   ],
   "source": [
    "# Support Vector Classifier parameters \n",
    "svc_tuned_params = {\n",
    "#     'kernel' : ['linear','poly','sigmoid','precomputed'],\n",
    "    'kernel' : ['linear','sigmoid'], \n",
    "    'C' : [0.0025,0.01,0.02,0.025,0.03,0.25,0.3,0.5,0.7]\n",
    "    }\n",
    "svc_clf = GridSearchCV(SVC(verbose=0),svc_tuned_params,cv=5)\n",
    "svc_clf.fit(X_train,y_train)\n",
    "print(\"Best paramters set found:\", svc_clf.best_params_)\n",
    "# print(\"Grid score:\")\n",
    "# for params, mean_score, scores in svc_clf.grid_scores_:\n",
    "#     print(\"\\t%0.3f (+\\-%0.03f) for %s\" % (mean_score, scores.std() * 2, params))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "('Best paramters set found:', {'splitter': 'best', 'max_leaf_nodes': None, 'min_samples_split': 0.1, 'criterion': 'gini', 'max_features': 'auto', 'max_depth': 5})\n"
     ]
    }
   ],
   "source": [
    "# Decision Tree Classfifier parameters\n",
    "dtc_tuned_params = {\n",
    "    'criterion' : ['gini','entropy'], \n",
    "    'splitter' : ['best','random'], \n",
    "    'max_depth': [4,5,None],\n",
    "    'min_samples_split' : [2,3,0.1,0.3,0.5], \n",
    "    'max_features': ['sqrt','auto','log2',0.1,0.2,0.5], \n",
    "    'max_leaf_nodes' : [None,2,3,4,5]\n",
    "}\n",
    "dtc_clf = GridSearchCV(DecisionTreeClassifier(),dtc_tuned_params,cv=5)\n",
    "dtc_clf.fit(X_train,y_train)\n",
    "print(\"Best paramters set found:\", dtc_clf.best_params_)\n",
    "# print(\"Grid score:\")\n",
    "# for params, mean_score, scores in dtc_clf.grid_scores_:\n",
    "#     print(\"\\t%0.3f (+\\-%0.03f) for %s\" % (mean_score, scores.std() * 2, params))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "('Best paramters set found:', {'n_neighbors': 5, 'weights': 'uniform', 'leaf_size': 1, 'algorithm': 'ball_tree'})\n"
     ]
    }
   ],
   "source": [
    "# K Neighbors Classifier\n",
    "knn_tuned_params = {\n",
    "    'n_neighbors' : range(3,10), \n",
    "    'weights' : ['uniform','distance'], \n",
    "    'algorithm' : ['auto','ball_tree','kd_tree','brute'], \n",
    "    'leaf_size' : range(1,30,2)\n",
    "}\n",
    "knn_clf = GridSearchCV(KNeighborsClassifier(),knn_tuned_params,cv=5)\n",
    "knn_clf.fit(X_train,y_train)\n",
    "print(\"Best paramters set found:\", knn_clf.best_params_)\n",
    "# print(\"Grid score:\")\n",
    "# for params, mean_score, scores in knn_clf.grid_scores_:\n",
    "#     print(\"\\t%0.3f (+\\-%0.03f) for %s\" % (mean_score, scores.std() * 2, params))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Put in our parameters for said classifiers\n",
    "# Random Forest parameters\n",
    "rf_params = {\n",
    "    'n_jobs': -1,\n",
    "    'n_estimators': 500,\n",
    "     'warm_start': True, \n",
    "     #'max_features': 0.2,\n",
    "    'max_depth': 6,\n",
    "    'min_samples_leaf': 2,\n",
    "    'max_features' : 'sqrt',\n",
    "    'verbose': 0\n",
    "}\n",
    "\n",
    "# Extra Trees Parameters\n",
    "et_params = {\n",
    "    'n_jobs': -1,\n",
    "    'n_estimators':500,\n",
    "    #'max_features': 0.5,\n",
    "    'max_depth': 8,\n",
    "    'min_samples_leaf': 2,\n",
    "    'verbose': 0\n",
    "}\n",
    "\n",
    "# AdaBoost parameters\n",
    "ada_params = {\n",
    "    'n_estimators': 100,\n",
    "    'learning_rate' : 0.2\n",
    "}\n",
    "\n",
    "# Gradient Boosting parameters\n",
    "gb_params = {\n",
    "    'n_estimators': 100,\n",
    "     'max_features': 'auto',\n",
    "    'max_depth': 4,\n",
    "    'min_samples_leaf': 1,\n",
    "    'verbose': 0\n",
    "}\n",
    "\n",
    "# Support Vector Classifier parameters \n",
    "svc_params = {\n",
    "    'kernel' : 'linear',\n",
    "    'C' : 0.02\n",
    "    }\n",
    "\n",
    "# Decision Tree Classfifier parameters\n",
    "dtc_params = {\n",
    "    'criterion' : 'gini', \n",
    "    'splitter' : 'best', \n",
    "    'max_depth': 5,\n",
    "    'min_samples_split' : 0.1, \n",
    "    'max_features': 'auto', \n",
    "    'max_leaf_nodes' : None\n",
    "}\n",
    "\n",
    "# K Nearest Neighbors Classifier parameters\n",
    "knn_params = {\n",
    "    'n_neighbors' : 5, \n",
    "    'weights' : 'uniform', \n",
    "    'algorithm' : 'ball_tree', \n",
    "    'leaf_size' : 1\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [],
   "source": [
    "SEED = 0\n",
    "# Create 5 objects that represent our 4 models\n",
    "rf = SklearnHelper(clf=RandomForestClassifier, seed=SEED, params=rf_params)\n",
    "et = SklearnHelper(clf=ExtraTreesClassifier, seed=SEED, params=et_params)\n",
    "ada = SklearnHelper(clf=AdaBoostClassifier, seed=SEED, params=ada_params)\n",
    "gb = SklearnHelper(clf=GradientBoostingClassifier, seed=SEED, params=gb_params)\n",
    "svc = SklearnHelper(clf=SVC, seed=SEED, params=svc_params)\n",
    "dtc = SklearnHelper(clf=DecisionTreeClassifier, seed=SEED, params=dtc_params)\n",
    "knn = SklearnHelper_norandom(clf=KNeighborsClassifier, params=knn_params)\n",
    "\n",
    "et_oof_train, et_oof_test = get_oof(et, X_train, y_train, X_test) # Extra Trees\n",
    "rf_oof_train, rf_oof_test = get_oof(rf,X_train, y_train, X_test) # Random Forest\n",
    "ada_oof_train, ada_oof_test = get_oof(ada, X_train, y_train, X_test) # AdaBoost \n",
    "gb_oof_train, gb_oof_test = get_oof(gb,X_train, y_train, X_test) # Gradient Boost\n",
    "svc_oof_train, svc_oof_test = get_oof(svc,X_train, y_train, X_test) # Support Vector Classifier\n",
    "dtc_oof_train, dtc_oof_test = get_oof(dtc,X_train, y_train, X_test) # Decision Trees Classifier\n",
    "knn_oof_train, knn_oof_test = get_oof(knn,X_train, y_train, X_test) # K Nearest Neighbor"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>AdaBoost</th>\n",
       "      <th>DecisionTree</th>\n",
       "      <th>ExtraTrees</th>\n",
       "      <th>GradientBoost</th>\n",
       "      <th>K Nearest Neighbor</th>\n",
       "      <th>RandomForest</th>\n",
       "      <th>SupportVectorMachine</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   AdaBoost  DecisionTree  ExtraTrees  GradientBoost  K Nearest Neighbor  \\\n",
       "0       0.0           0.0         0.0            0.0                 0.0   \n",
       "1       1.0           1.0         1.0            1.0                 1.0   \n",
       "2       1.0           1.0         0.0            0.0                 0.0   \n",
       "3       1.0           1.0         1.0            1.0                 1.0   \n",
       "4       0.0           0.0         0.0            0.0                 0.0   \n",
       "\n",
       "   RandomForest  SupportVectorMachine  \n",
       "0           0.0                   0.0  \n",
       "1           1.0                   1.0  \n",
       "2           0.0                   1.0  \n",
       "3           1.0                   1.0  \n",
       "4           0.0                   0.0  "
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "base_predictions_train = pd.DataFrame( {'RandomForest': rf_oof_train.ravel(),\n",
    "        'ExtraTrees': et_oof_train.ravel(),\n",
    "        'AdaBoost': ada_oof_train.ravel(),\n",
    "        'GradientBoost': gb_oof_train.ravel(), \n",
    "        'SupportVectorMachine' : svc_oof_train.ravel(), \n",
    "        'DecisionTree' : dtc_oof_train.ravel(), \n",
    "        'K Nearest Neighbor' : knn_oof_train.ravel()\n",
    "    })\n",
    "base_predictions_train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "X_train2 = np.concatenate(( et_oof_train, rf_oof_train, ada_oof_train, gb_oof_train, svc_oof_train, dtc_oof_train, knn_oof_train), axis=1)\n",
    "X_test2 = np.concatenate(( et_oof_test, rf_oof_test, ada_oof_test, gb_oof_test, svc_oof_test, dtc_oof_test, knn_oof_test), axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "gbm_tuned_params= {\n",
    "    'n_estimators' : range(100,2000,200), \n",
    "    'learning_rate' : [0.01,0.02,0.05,0.1,0.2], \n",
    "    'max_depth' : [3,4,5], \n",
    "    'min_child_weight' : [1,2,3], \n",
    "    'gamma' : [0.8,0.9,1], \n",
    "    'subsample' : [0.7,0.8,0.9], \n",
    "    'colsample_bytree' : [0.7,0.8,0.9], \n",
    "    'scale_pos_weight' : [0.9,1,1.1]\n",
    "}\n",
    "\n",
    "gbm_clf = GridSearchCV(xgb.XGBClassifier(verbose=0),gbm_tuned_params,cv=5)\n",
    "gbm_clf.fit(X_train,y_train)\n",
    "print(\"Best paramters set found:\", gbm_clf.best_params_)\n",
    "# print(\"Grid score:\")\n",
    "# for params, mean_score, scores in gbm_clf.grid_scores_:\n",
    "#     print(\"\\t%0.3f (+\\-%0.03f) for %s\" % (mean_score, scores.std() * 2, params))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [],
   "source": [
    "gbm = xgb.XGBClassifier(\n",
    "    #learning_rate = 0.02,\n",
    " n_estimators= 2000,\n",
    " max_depth= 4,\n",
    " min_child_weight= 2,\n",
    " #gamma=1,\n",
    " gamma=0.9,                        \n",
    " subsample=0.8,\n",
    " colsample_bytree=0.8,\n",
    " objective= 'binary:logistic',\n",
    " nthread= -1,\n",
    " scale_pos_weight=1).fit(X_train2, y_train)\n",
    "predictions = gbm.predict(X_test2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "predictions = predictions.astype(int)\n",
    "submission = pd.DataFrame({\n",
    "        \"PassengerId\": test_df['PassengerId'],\n",
    "        \"Survived\": predictions\n",
    "    })\n",
    "submission.to_csv('../input/submission.csv', index=False)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
